package model.observer;

import commands.Command;
import model.value.VersionnedValue;

import model.subject.Sensor;

/**
 * Interface du modèle d'un observeur. Le contrat est le suivant : toute notification (update) sur l'observeur doit conduire à une et une seule 
 * récupération (getValue()) de la valeur sur le capteur.
 */
public interface SensorObserver {
	
	/**
	 * Notification d'un changement sur le capteur.
	 * @param sensor	Le capteur ayant subi une modification.
	 */
	public void update(Sensor sensor);
	
	/**
	 * Récupération de la valeur de l'observeur.
	 * @return	La valeur de l'observeur.
	 */
	public VersionnedValue getValue();
	
	/**
	 * Modification de la commande destinée à mettre à jour la présentation d'un observeur après une modification de la valeur de son modèle associé.
	 * @param notifyChangesToDisplayerPanelCommand	La nouvelle commande destinée à mettre à jour la présentation d'un observeur après une modification 
	 * 												de la valeur de son modèle associé.
	 */
	public void setNotifyChangesToDisplayerPanelCommand(Command notifyChangesToDisplayerPanelCommand);
	
}
